package JDBC.JDBC_API.ConnectionDemo;

import java.sql.*;

@SuppressWarnings("all")
public class index {
    public static void main(String[] args) throws SQLException {
        //Connection（数据库连接对象）

        //作用
        //1、获取执行SQL的对象
        //2、管理事务

        //获取执行SQL的对象
        //三种方式

        String url = "jdbc:mysql://127.0.0.1:3306/jdbc_study";
        String user = "root";
        String password = "lyx254254";
        Connection cnt = DriverManager.getConnection(url, user, password);
        String sql1 = """
                update account
                set money = 5000
                where name = '张三';
                """;

        String sql2 = """
                update account
                set money = 5000
                where name = '李四';
                """;

        //1、获取普通执行SQL的对象(Statement)
        Statement sta = cnt.createStatement();

        //2、预编译SQL的执行SQL对象(PreparedStatement)：防止SQL注入
        PreparedStatement preSta = cnt.prepareStatement(sql1);

        //3、执行存储过程的对象(CallableStatement)
        CallableStatement callSta = cnt.prepareCall(sql1);


        //管理事务

        //开启事务
        //自动提交事务，参数为false是为取消自动提交（手动提交），即开启事务
        //cnt.setAutoCommit(false);

        //提交事务
        //cnt.commit();

        //回滚事务
        //cnt.rollback();


        //管理事务使用方法：


        try {
            //开启事务
            cnt.setAutoCommit(false);

            //执行SQL语句的代码
            int line1 = sta.executeUpdate(sql1);

            //手动制造一个异常
            int i = 3 / 0;

            int line2 = sta.executeUpdate(sql2);

            System.out.println("共影响了" + (line1 + line2) + "行");

            //提交事务
            cnt.commit();
        } catch (Exception e) {
            //回滚事务
            cnt.rollback();
            e.printStackTrace();
            System.err.println("出现异常，进行回滚操作");
        }


        //cnt.commit();
        //或者
        //cnt.rollback();


    }
}
